package com.mccrea.principle.segregation;

/**
 * @Classname Segregation1
 * @Description 接口隔离原则案例一。
 *              分析：需要重写很多不需要的方法，估计采用接口隔离原则
 * @Date 2021/5/6 0006 13:49
 * @Created by Mccrea_Gao
 * @see com.mccrea.principle.segregation.improve.Segregation
 */
public class Segregation1 {
    public static void main(String[] args) {
        A a = new A();
        a.depend1(new B());
        C c = new C();
        c.depend4(new D());
    }
}


/**
 * 接口
 */
interface Interface1 {
    void operation1();
    void operation2();
    void operation3();
    void operation4();
    void operation5();
}

class B implements Interface1{

    @Override
    public void operation1() {
        System.out.println("B 实现了operation1 ");
    }

    @Override
    public void operation2() {
        System.out.println("B 实现了operation2 ");
    }

    @Override
    public void operation3() {
        System.out.println("B 实现了operation3 ");
    }

    @Override
    public void operation4() {
        System.out.println("B 实现了operation4 ");
    }

    @Override
    public void operation5() {
        System.out.println("B 实现了operation5 ");
    }
}

class D implements Interface1 {

    @Override
    public void operation1() {
        System.out.println("D 实现了operation1 ");
    }

    @Override
    public void operation2() {
        System.out.println("D 实现了operation2 ");
    }

    @Override
    public void operation3() {
        System.out.println("D 实现了operation3 ");
    }

    @Override
    public void operation4() {
        System.out.println("D 实现了operation4 ");
    }

    @Override
    public void operation5() {
        System.out.println("D 实现了operation5 ");
    }
}

/**
 * 类A通过接口Interface1依赖类B，只使用1,2,3方法
 */
class A {
    public void depend1(Interface1 i) {
        i.operation1();
    }
    public void depend2(Interface1 i) {
        i.operation2();
    }
    public void depend3(Interface1 i) {
        i.operation3();
    }
}

/**
 * 类A通过接口Interface1依赖类D，只使用1,4,5方法
 */
class C {
    public void depend1(Interface1 i) {
        i.operation1();
    }
    public void depend4(Interface1 i) {
        i.operation4();
    }
    public void depend5(Interface1 i) {
        i.operation5();
    }
}